/**
 * 
 */
package com.shine.icis.dao;

import java.util.Date;
import java.util.List;

import com.shine.cotrun.web.comm.ListPage;
import com.shine.icis.dao.IBaseHibernateDAO;
import com.shine.icis.dao.param.ETLRunLogQueryParameters;
import com.shine.icis.dto.DictOption;
import com.shine.icis.dto.ReturnMsg;
import com.shine.icis.hbean.ProgExeLog;
import com.shine.icis.hbean.ETLRunLog;

/**
 * @author zsy
 *
 */
public interface IETLLogDAO extends IBaseHibernateDAO {

	/**
	 * 调用存储过和
	 * @param proSql
	 * @param date
	 * @return
	 */
	public ReturnMsg callProc(String proSql, int date);
	
	/**
	 * 查找ETL过程列表
	 * @return
	 */
	public List<DictOption> findEtlProcOptions();
	
	/**
	 * 查找警告级别列表
	 * @return
	 */
	public List<DictOption> findPrepLevelOptions();
	

	/**
	 * 取得业务系统列表
	 * @return
	 */
	public List<DictOption> findBizSystemOptions();
	
	/**
	 * 查看ETL运行日志
	 * @param qp
	 * @return
	 */
	public ListPage<ETLRunLog> findETLRunLogPage(ETLRunLogQueryParameters qp);
	
	
	
	/**
	 * 取得ETL整个过程最近一次开始日志，
	 * 开始状态日志的时间作为监控平台日志分析的起点
	 * @return
	 */
	public ProgExeLog findLastStartProcess();
	
	/**
	 * 取得ETL整个过程最近一次开始日志时间之后的一次结束日志，
	 * 结束状态日志判断是否加载数据检查结果
	 * @return
	 */
	public ProgExeLog findLastEndProcess(int operDate, int operTime);
	
	/**
	 * 取得ETL整个过程最近一次结束日志
	 * 取最后一个已结束的过程
	 * @return
	 */
	public ProgExeLog findLastEndProcess();
	
	/**
	 * 取得ETL整个过程最近一次结束日志时间之前的一次开始日志，
	 * 取最后一个已结束的过程
	 * @param operDate
	 * @param operTime
	 * @return
	 */
	public ProgExeLog findLastStartProcess(int operDate, int operTime);
	
	/**
	 * 查找过程控制信息
	 * @param datasetTypeID 数据集类型ID（柜台系统、法人清算、银企划付）
	 * @param etlProcID 过程ID （加载、抽取、转换）
	 * @param etlType 日志类型:1为任务，2为转换
	 * @param operDate 起始日期
	 * @param operDate 起始时间
	 * @return
	 */
	public List<ProgExeLog> findProgExeLogs(int datasetTypeID, int etlProcID,
			int operDate, int operTime);
	
	/**
	 * 查找过程控制信息
	 * @param etlProcID
	 * @param operDate
	 * @param operTime
	 * @return
	 */
	public List<ProgExeLog> findProgExeLogs(int etlProcID, int operDate, int operTime);
	
	/**
	 * 查找日志告警级别信息
	 * @param datasetTypeID 数据集类型ID（柜台系统、法人清算、银企划付）
	 * @param etlProcID 过程ID （加载、抽取、转换）
	 * @param etlType 日志类型:1为任务，2为转换
	 * @param operDate 起始日期
	 * @param operTime 起始时间
	 * @param prepLevelID 最小警告级别
	 * @return
	 */
	public List<Integer> findETLRunLogPrepLevelIDs(int datasetTypeID, int etlProcID, 
			int operDate, int operTime, int prepLevelID);
	
	/**
	 * 统计整个过程时间段内告警信息条数
	 * @param startOperDate
	 * @param startOperTime
	 * @param endOperDate
	 * @param endOperTime
	 * @param prepLevelID
	 * @return
	 */
	public int findETLRunLogNum(Integer datasetTypeID, int startOperDate, int startOperTime, int endOperDate, int endOperTime, int prepLevelID);
	
	/**
	 * 查找整个过程，一个柜台系统所有的控制日志
	 * @param datasetTypeID
	 * @param startOperDate
	 * @param startOperTime
	 * @param endOperDate
	 * @param endOperTime
	 * @return
	 */
	public List<ProgExeLog> findPELogsByDatasetTypeId(int datasetTypeID,
			int startOperDate, int startOperTime, int endOperDate, int endOperTime);
	
	/**
	 * 查找整个过程，一个过程所有的控制日志
	 * @param etlProcID
	 * @param startOperDate
	 * @param startOperTime
	 * @param endOperDate
	 * @param endOperTime
	 * @return
	 */
	public List<ProgExeLog> findPELogsByEtlProcId(int etlProcID,
			int startOperDate, int startOperTime, int endOperDate, int endOperTime);
	
	/**
	 * 查询数据库时间
	 * TASKSERVER写的运行日志，控制日志都是以数据库时间为准，所以WEB操作产生的LOG也要以数据库时间为准
	 * @return
	 */
	public Date findDatabaseDate();
	
	/**
	 * 调用存储过程写入RUNLOG
	 * @param etlProcID
	 * @param prepLevelID
	 * @param runStatus
	 * @param resultMsg
	 * @return
	 */
	public void saveRunLog(int etlProcID, int prepLevelID, char runStatus, String resultMsg);
}
